题目描述:
給定一個非負整數 numRows
,生成帕斯卡三角形的前 numRows
行。
Example :
numRows = 5
[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
解題思路:
這題是帕斯卡三角形的實作題。最直觀的解法是透過迭代法逐列構建帕斯卡三角形。具體來說,我們可以按以下步驟進行:
初始化每一列:我們從第一列開始,逐列建立帕斯卡三角形。每一列的開頭和結尾的元素都是1,因此可以先根據列的數量初始化一個元素為1的陣列。
更新中間的元素:對於每一列,除了開頭和結尾的元素外,其它中間的元素可以通過上一列的相鄰兩個元素相加得到。這樣逐行計算下去,我們就能得到帕斯卡三角形的每一行。
這個方法的好處在於直觀且易於理解。只需要逐列計算,並利用前一列的結果來生成當前列的內容,逐步構建出整個帕斯卡三角形。
var generate = function(numRows) {
const triangle = [];
for (let i = 0; i < numRows; i++) {
const row = Array(i + 1).fill(1);
for (let j = 1; j < i; j++) {
row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
triangle.push(row);
}
return triangle;
};
時間複雜度:
O(numRows*numRows)
。我們需要生成numRows
行,每一行最多有numRows
個元素,因此時間複雜度為O(numRows*numRows)
。
空間複雜度:O(numRows*numRows)
,用於存儲帕斯卡三角形的二維陣列。
總結:
這道題目可以歸類為「iteration」(迭代)。透過構建帕斯卡三角形的過程,讀者不僅可以熟悉迭代的概念,還能有效地練習陣列的基本操作,特別是如何處理二維陣列。理解如何構建和操作這樣的資料結構是實際開發中的重要技能,無論是用於數據儲存還是資料處理,都能派上用場。